/*
 * 01指针和字符串.c
 *
 *  Created on: 2024年3月10日
 *      Author: HP
 */


int main0701(){
	char ch[] = "hello world";
	char* p = ch;
	printf("%s\n", p); // 打印字符串
	printf("%c\n", *p); // 打印第一个字符

	char ch2[] = "hello world"; // 定义在栈区的字符串
	char* p2 = "hello world"; // 定义在数据区常量区的字符串，这个位置的字符串是不允许修改的
	ch2[2] = 'm';
	// p2[2] = 'm'; // error
	// *(p2+2) = 'm'; // error
	// printf("hello world") // 这里的"hello world"也是在常量区

	char* p3 = "hello world";
	char* p4 = "hello world";
	printf("%p\n", p3);
	printf("%p\n", p4); // 同一地址
	return 0;
}

int main070101(){
	// 字符串数组
	// 指针数组
	char ch1[] = "hello";
	char ch2[] = "world";
	char ch3[] = "dababei";
	char* arr[] = {ch1, ch2, ch3}; // 这里的字符串可以修改

	char* arr2[] = {"hello", "world", "dababei"}; // 这里的字符串和上面一样不能修改
	for(int i=0; i<3; i++){
		printf("%s\n", arr2[i]);
		printf("%c\n", arr2[i][0]); // 打印首字母
	}

	// 按字符串首字母大小排序
	for(int i=0; i<3-1; i++){
		for(int j=0; j<3-1-i; j++){
			if(arr2[j][0] > arr2[j+1][0]){
				char* temp = arr2[j]; // 虽然arr2中的每个字符串元素是常量，但arr2中每个元素不是常量（每个元素存的是字符串的地址，字符串放在数据区），我们可以修改arr2中每个元素
				arr2[j] = arr2[j+1];
				arr2[j+1] = temp;
			}
		}
	}
	for(int i=0; i<3; i++){
		printf("%s\n", arr2[i]);
	}
	return 0;
}
